package Abnormal;

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        /*
        需求：
        键盘录入自己女朋友的姓名和年龄，
        姓名的长度在3~10之间
        年龄的范围为18~40岁，
        超出这个范围是异常数据不能赋值的，需要重新录入，一直录到正确为止
        提示：需要考虑键盘录入的所有情况

         */

        Scanner sc=new Scanner(System.in);
        GirlFriend girlFriend=new GirlFriend();

        while (true) {
            try {
                System.out.println("请输入女朋友的姓名");
                String name = sc.nextLine();
    //        其中一种方法，通过if条件语句进行判别,但是运行繁琐，可以在方法的底层进行判别
    //        即在对象中的setName，setAge中进行条件判断和异常抛出
    //        if (name.length()>=3&&name.length()<=10){ girlFriend.setName(name);}
                girlFriend.setName(name);
    //        此时ageStr是属于字符串类型的，需要将其转换为整数类型


                System.out.println("请输入女朋友的年龄");
                String ageStr = sc.nextLine();
                int age = Integer.parseInt(ageStr);//NumberFormatException
                girlFriend.setAge(age);
//                如果所有的数据都是正确的，那么跳出循环
                break;
            }catch (NumberFormatException e){
                System.out.println("年龄的格式有误，请输入数字");
//                continue;可写可不写
            }catch (RuntimeException e){
                System.out.println("姓名的长度或者年龄的范围有问题");
//            continue;可写可不写
            }
        }

        System.out.println(girlFriend);

    }
}
class GirlFriend{
    private String name;
    private int age;

    public GirlFriend() {
    }

    public GirlFriend(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        if (name.length()<2||name.length()>10){
            throw new RuntimeException();
        }
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        if (age<18||age>40){
            throw new RuntimeException();
        }
        this.age = age;
    }

    public String toString() {
        return "GirlFriend{name = " + name + ", age = " + age + "}";
    }
}